#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
bool flag;
char ph[15];
struct Node{
    //以该点结尾的单词数
    int c;
    int f;
    Node* Next[10];
    Node(){
        c=0;
        f=0;
        for(int i=0;i<10;i++){
            Next[i]=NULL;
        }
    }
};
void insert(Node* &rt,char* s){
    int l=strlen(s);
    int val;
    Node* p=rt;
    for(int i=0;i<l;i++){
        val=s[i]-'0';
        //包括每个字符之前的字符串都可以作为前缀
        //p->f=1;
        //可以当成模板了 找是否有前缀hdu1305同理
        //要加这一句!!
        //考虑先插入长的 再插入短的 只要短的遍历完下一个节点还有数据即可，说明短的为前缀
        if(i==l-1 && p->Next[val]){
            flag=true;
            return;
        }
        if(p->Next[val]==NULL){
            p->Next[val]=new Node();
        }
        // else{
        //     //这个字符串是前面字符串的前缀
        //     if(p->c==1){
        //         flag=true;
        //     }
        // }
        p=p->Next[val];
        if(p->f){
            flag=true;
        }
    }
    //标记这个字符串作为前缀，用于与后面的匹配
    //p->c=1;
    //该字符串到最后一个字符，f已被标记，说明已经有字符串以这个为前缀
    // if(p->f){
    //     flag=1;
    // }
    p->f=1;
    //为什么修改成hdu1305 就wa了 两道题的不同点在哪里
}
void clear(Node* root){
    if(root==NULL){
        return;
    }
    for(int i=0;i<10;i++){
        clear(root->Next[i]);
    }
    delete(root);
}
int main(void){
    int t,n;
    scanf("%d",&t);
    while(t--){
        Node* root=new Node();
        scanf("%d",&n);
        flag=false;
        while(n--){
            scanf("%s",ph);
            if(flag){
                continue;
            }
            insert(root,ph);
        }
        if(flag){
            printf("NO\n");
        }
        else{
            printf("YES\n");
        }
        clear(root);
    }
    return 0;
}
